package br.com.gaspar.tm.bo;

import java.util.Date;

import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.gaspar.framework.modelo.BaseBO;
import br.com.gaspar.framework.persistencia.IBaseDAO;
import br.com.gaspar.tm.bo.iface.IFaleConoscoBO;
import br.com.gaspar.tm.dao.iface.IProjetoDAO;
import br.com.gaspar.tm.entidade.FaleConosco;
import br.com.gaspar.utils.exception.BaseException;

@Stateless
@Local(IFaleConoscoBO.class)
public class FaleConoscoBO extends BaseBO<FaleConosco> implements IFaleConoscoBO {
	
	private static final Logger log = LoggerFactory.getLogger(FaleConoscoBO.class);
	
	@Resource(mappedName="java:jboss/mail/Gmail")
	private Session sessaoEmail;
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 9037085151626072330L;
	
	@EJB
	private IProjetoDAO<FaleConosco> dao;
	
	@Override
	public IBaseDAO<FaleConosco> getDAOPadrao() {
		return this.dao;
	}
	
	@Override
	protected void gravarAntes(FaleConosco entidade) throws BaseException {
		entidade.setDataContato(new Date());
		super.gravarAntes(entidade);
	}
	
	@Override
	protected void gravarApos(FaleConosco entidade) throws BaseException {
		try {
			enviarEmail(entidade);
		} catch (AddressException e) {
			throw new BaseException("Erro ao enviar email!");
		} catch (MessagingException e) {
			throw new BaseException("Erro ao enviar email!");
		}
	}
	
	private void enviarEmail(FaleConosco faleConosco) throws AddressException, MessagingException{
		StringBuilder sb =  new StringBuilder("Mensagem do Fale Conosco T&M Transporte de Cargas \n");
		sb.append("Nome: ");
		sb.append(faleConosco.getNome());
		sb.append("\n");
		sb.append("E-mail: ");
		sb.append(faleConosco.getEmail());
		sb.append("\n");
		sb.append("Telefone: ");
		sb.append(faleConosco.getTelefone());
		sb.append("\n");
		sb.append("Cidade: ");
		sb.append(faleConosco.getCidade());
		sb.append("\n");
		sb.append("Mensagem: ");
		sb.append(faleConosco.getMensagem());
		sb.append("\n");
	     Message message = new MimeMessage(sessaoEmail);
	     //logistica@tmtransporte.com.br
	     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("logistica@tmtransporte.com.br", false));
	     message.setFrom(new InternetAddress(faleConosco.getEmail()));
	     message.setSubject("Fale Conosco - TM Transporte de Cargas");
	     message.setText(sb.toString());
	     message.setHeader("X-Mailer", "My Mailer");
	     message.setSentDate(new Date());
	     
	     Transport.send(message);
	     log.debug("E-mail enviado!");
		
	}
}
